home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 16 / AMIGAplus Sonderheft 16 (1998)(ICP)(DE)[!].iso / pd / anwendungen / xpk_source / xpkmaster / fib.c < prev    next >
C/C++ Source or Header  |  1998-08-27  |  2KB  |  67 lines

  1. #ifndef XPKMASTER_FIB_C
  2. #define XPKMASTER_FIB_C
  3.  
  4. /* Routinesheader
  5.  
  6.     Name:        fib.c
  7.     Main:        xpkmaster
  8.     Versionstring:    $VER: fib.c 1.2 (09.01.1998)
  9.     Author:        SDI
  10.     Distribution:    Freeware
  11.     Description:    FIB related routines
  12.  
  13.  1.0   05.10.96 : first real version
  14.  1.1   20.12.97 : code cleanup
  15.  1.2   09.01.98 : added XPK_ALLINONE
  16. */
  17.  
  18. #include <proto/exec.h>
  19. #include <proto/dos.h>
  20. #include <exec/types.h>
  21. #include "xpkmaster.h"
  22.  
  23. XPK_ALLINONE void updatefib(struct XpkBuffer *xbuf)
  24. {
  25.   struct XpkStreamHeader *globhdr = &xbuf->xb_Headers.h_Glob;
  26.   XpkChunkHeader *lochdr = &xbuf->xb_Headers.h_Loc;
  27.   struct XpkFib *fib = &xbuf->xb_Fib;
  28.   LONG ulen, clen;
  29.  
  30.   if(xbuf->xb_Headers.h_Glob.xsh_Flags & XPKSTREAMF_LONGHEADERS)
  31.   {
  32.     ulen = lochdr->xch_Long.xchl_ULen;
  33.     clen = lochdr->xch_Long.xchl_CLen;
  34.   }
  35.   else
  36.   {
  37.     ulen = lochdr->xch_Word.xchw_ULen;
  38.     clen = lochdr->xch_Word.xchw_CLen;
  39.   }
  40.  
  41.   fib->xf_Type = XPKTYPE_PACKED;
  42.   fib->xf_CLen = globhdr->xsh_CLen + 8;
  43.   fib->xf_ULen = globhdr->xsh_ULen;
  44.   fib->xf_NLen = ulen + XPK_MARGIN;
  45.   fib->xf_CCur += ROUNDLONG (clen) + xbuf->xb_Headers.h_LocSize;
  46.   fib->xf_UCur += ulen;
  47.   fib->xf_ID = globhdr->xsh_Type;
  48.   fib->xf_SubVersion = globhdr->xsh_SubVrs;
  49.   fib->xf_MasVersion = globhdr->xsh_MasVrs;
  50.   CopyMem(globhdr->xsh_Initial, fib->xf_Head, 16);
  51.  
  52.   percentages(fib);
  53. }
  54.  
  55. XPK_ALLINONE void percentages (struct XpkFib *fib)
  56. {
  57.   fib->xf_Ratio = 0;
  58.   if(fib->xf_ULen)
  59.     fib->xf_Ratio = 100 - 100 * fib->xf_CLen / fib->xf_ULen;
  60.   if(fib->xf_Ratio < 0)
  61.     fib->xf_Ratio = 0;
  62.   *(LONG *) fib->xf_Packer = fib->xf_ID;
  63.   fib->xf_Packer[4] = 0;
  64. }
  65.  
  66. #endif /* XPKMASTER_FIB_C */
  67.